<?php
namespace app\admin\middleware\common;

use think\facade\Config;
use think\facade\Cache;
use think\facade\Db;

class LoadAdminConfig
{
    public function handle($request, \Closure $next)
    {
        try {
            // 定义缓存的唯一键名
            $cacheKey = 'admin_config_data';
            // 尝试从缓存获取配置
            $configList = Cache::get($cacheKey);
            // 如果缓存中没有数据 (缓存不存在或已过期)
            if (!$configList) {
                // 直接从数据库查询
                $configList = Db::name('admin_config')->column('value', 'key');
                // 如果查询到了数据，就将其写入缓存
                if ($configList) {
                    Cache::set($cacheKey, $configList);
                }
                // 调试日志：方便观察是否走了数据库
                trace('从数据库加载并缓存了后台配置', 'info');
            }

            // 将获取到的配置设置到全局 Config 服务中
            if ($configList) {
                Config::set($configList, 'admin_config');
            }

        } catch (\Exception $e) {
            // 异常处理，记录日志
            trace('加载后台配置时发生错误: ' . $e->getMessage(), 'error');
        }

        return $next($request);
    }
}
